home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 December / 2004-12 CHIP.iso / CHIP / Porady / Srodowisko PHP-MySQL / WAMP5 1.3 / wamp5_1.3.exe / {app} / Apache / include / buff.h < prev    next >
C/C++ Source or Header  |  2004-02-16  |  7KB  |  207 lines

  1. /* Copyright 1999-2004 The Apache Software Foundation
  2.  *
  3.  * Licensed under the Apache License, Version 2.0 (the "License");
  4.  * you may not use this file except in compliance with the License.
  5.  * You may obtain a copy of the License at
  6.  *
  7.  *     http://www.apache.org/licenses/LICENSE-2.0
  8.  *
  9.  * Unless required by applicable law or agreed to in writing, software
  10.  * distributed under the License is distributed on an "AS IS" BASIS,
  11.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12.  * See the License for the specific language governing permissions and
  13.  * limitations under the License.
  14.  */
  15.  
  16. #ifndef APACHE_BUFF_H
  17. #define APACHE_BUFF_H
  18.  
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22.  
  23. #ifdef B_SFIO
  24. #include "sfio.h"
  25. #endif
  26.  
  27. #include <stdarg.h>
  28.  
  29. /* Reading is buffered */
  30. #define B_RD     (1)
  31. /* Writing is buffered */
  32. #define B_WR     (2)
  33. #define B_RDWR   (3)
  34. /* At end of file, or closed stream; no further input allowed */
  35. #define B_EOF    (4)
  36. /* No further output possible */
  37. #define B_EOUT   (8)
  38. /* A read error has occurred */
  39. #define B_RDERR (16)
  40. /* A write error has occurred */
  41. #define B_WRERR (32)
  42. #ifdef B_ERROR  /* in SVR4: sometimes defined in /usr/include/sys/buf.h */
  43. #undef B_ERROR
  44. #endif
  45. #define B_ERROR (48)
  46. /* Use chunked writing */
  47. #define B_CHUNK (64)
  48. /* bflush() if a read would block */
  49. #define B_SAFEREAD (128)
  50. /* buffer is a socket */
  51. #define B_SOCKET (256)
  52. #ifdef CHARSET_EBCDIC
  53. #define B_ASCII2EBCDIC 0x40000000  /* Enable conversion for this buffer */
  54. #define B_EBCDIC2ASCII 0x80000000  /* Enable conversion for this buffer */
  55. #endif /*CHARSET_EBCDIC*/
  56.  
  57. typedef struct buff_struct BUFF;
  58.  
  59. struct buff_struct {
  60.     int flags;            /* flags */
  61.     unsigned char *inptr;    /* pointer to next location to read */
  62.     int incnt;            /* number of bytes left to read from input buffer;
  63.                  * always 0 if had a read error  */
  64.     int outchunk;        /* location of chunk header when chunking */
  65.     int outcnt;            /* number of byte put in output buffer */
  66.     unsigned char *inbase;
  67.     unsigned char *outbase;
  68.     int bufsiz;
  69.     void (*error) (BUFF *fb, int op, void *data);
  70.     void *error_data;
  71.     long int bytes_sent;    /* number of bytes actually written */
  72.  
  73.     ap_pool *pool;
  74.  
  75. /* could also put pointers to the basic I/O routines here */
  76.     int fd;            /* the file descriptor */
  77.     int fd_in;            /* input file descriptor, if different */
  78. #ifdef WIN32
  79.     HANDLE hFH;            /* Windows filehandle */
  80. #endif
  81.  
  82.     /* transport handle, for RPC binding handle or some such */
  83.     void *t_handle;
  84.  
  85. #ifdef B_SFIO
  86.     Sfio_t *sf_in;
  87.     Sfio_t *sf_out;
  88. #endif
  89.  
  90.     void *callback_data;
  91.     void (*filter_callback)(BUFF *, const void *, int );
  92.     
  93. };
  94.  
  95. #ifdef B_SFIO
  96. typedef struct {
  97.     Sfdisc_t disc;
  98.     BUFF *buff;
  99. } apache_sfio;
  100.  
  101. extern Sfdisc_t *bsfio_new(pool *p, BUFF *b);
  102. #endif
  103.  
  104. /* Options to bset/getopt */
  105. #define BO_BYTECT (1)
  106.  
  107. /* Stream creation and modification */
  108. API_EXPORT(BUFF *) ap_bcreate(pool *p, int flags);
  109. API_EXPORT(void) ap_bpushfd(BUFF *fb, int fd_in, int fd_out);
  110. #ifdef WIN32
  111. API_EXPORT(void) ap_bpushh(BUFF *fb, HANDLE hFH);
  112. #endif
  113. API_EXPORT(int) ap_bsetopt(BUFF *fb, int optname, const void *optval);
  114. API_EXPORT(int) ap_bgetopt(BUFF *fb, int optname, void *optval);
  115. API_EXPORT(int) ap_bsetflag(BUFF *fb, int flag, int value);
  116. API_EXPORT(int) ap_bclose(BUFF *fb);
  117.  
  118. #define ap_bgetflag(fb, flag)    ((fb)->flags & (flag))
  119.  
  120. /* Error handling */
  121. API_EXPORT(void) ap_bonerror(BUFF *fb, void (*error) (BUFF *, int, void *),
  122.               void *data);
  123.  
  124. /* I/O */
  125. API_EXPORT(int) ap_bread(BUFF *fb, void *buf, int nbyte);
  126. API_EXPORT(int) ap_bgets(char *s, int n, BUFF *fb);
  127. API_EXPORT(int) ap_blookc(char *buff, BUFF *fb);
  128. API_EXPORT(int) ap_bskiplf(BUFF *fb);
  129. API_EXPORT(int) ap_bwrite(BUFF *fb, const void *buf, int nbyte);
  130. API_EXPORT(int) ap_bflush(BUFF *fb);
  131. API_EXPORT(int) ap_bputs(const char *x, BUFF *fb);
  132. API_EXPORT_NONSTD(int) ap_bvputs(BUFF *fb,...);
  133. API_EXPORT_NONSTD(int) ap_bprintf(BUFF *fb, const char *fmt,...)
  134.                 __attribute__((format(printf,2,3)));
  135. API_EXPORT(int) ap_vbprintf(BUFF *fb, const char *fmt, va_list vlist);
  136.  
  137. /* Internal routines */
  138. API_EXPORT(int) ap_bflsbuf(int c, BUFF *fb);
  139. API_EXPORT(int) ap_bfilbuf(BUFF *fb);
  140.  
  141. #ifndef CHARSET_EBCDIC
  142.  
  143. #define ap_bgetc(fb)   ( ((fb)->incnt == 0) ? ap_bfilbuf(fb) : \
  144.             ((fb)->incnt--, *((fb)->inptr++)) )
  145.  
  146. #define ap_bputc(c, fb) ((((fb)->flags & (B_EOUT|B_WRERR|B_WR)) != B_WR || \
  147.              (fb)->outcnt == (fb)->bufsiz) ? ap_bflsbuf(c, (fb)) : \
  148.              ((fb)->outbase[(fb)->outcnt++] = (c), 0))
  149.  
  150. #else /*CHARSET_EBCDIC*/
  151.  
  152. #define ap_bgetc(fb)   ( ((fb)->incnt == 0) ? ap_bfilbuf(fb) : \
  153.             ((fb)->incnt--, (fb->flags & B_ASCII2EBCDIC)\
  154.             ?os_toebcdic[(unsigned char)*((fb)->inptr++)]:*((fb)->inptr++)) )
  155.  
  156. #define ap_bputc(c, fb) ((((fb)->flags & (B_EOUT|B_WRERR|B_WR)) != B_WR || \
  157.              (fb)->outcnt == (fb)->bufsiz) ? ap_bflsbuf(c, (fb)) : \
  158.              ((fb)->outbase[(fb)->outcnt++] = (fb->flags & B_EBCDIC2ASCII)\
  159.              ?os_toascii[(unsigned char)c]:(c), 0))
  160.  
  161. #endif /*CHARSET_EBCDIC*/
  162. struct child_info {
  163. #ifdef WIN32
  164.     /*
  165.      *  These handles are used by ap_call_exec to call 
  166.      *  create process with pipe handles.
  167.      */
  168.     HANDLE hPipeInputRead;
  169.     HANDLE hPipeOutputWrite;
  170.     HANDLE hPipeErrorWrite;
  171. #else
  172.     /* 
  173.      * We need to put a dummy member in here to avoid compilation
  174.      * errors under certain Unix compilers, like SGI's and HPUX's,
  175.      * which fail to compile a zero-sized struct.  Of course
  176.      * it would be much nicer if there was actually a use for this
  177.      * structure under Unix.  Aah the joys of x-platform code.
  178.      */
  179.     int dummy;
  180. #endif
  181. };
  182. API_EXPORT(int) ap_bspawn_child(pool *, int (*)(void *, child_info *), void *,
  183.                     enum kill_conditions, BUFF **pipe_in, BUFF **pipe_out,
  184.                     BUFF **pipe_err);
  185.  
  186. /* enable non-blocking operations */
  187. API_EXPORT(int) ap_bnonblock(BUFF *fb, int direction);
  188. /* and get an fd to select() on */
  189. API_EXPORT(int) ap_bfileno(BUFF *fb, int direction);
  190.  
  191. /* bflush() if a read now would block, but don't actually read anything */
  192. API_EXPORT(void) ap_bhalfduplex(BUFF *fb);
  193.  
  194. #if defined(WIN32) || defined(NETWARE) || defined(CYGWIN_WINSOCK) 
  195.  
  196. /* ap_recvwithtimeout/ap_sendwithtimeout socket primitives for WinSock */
  197. API_EXPORT(int) ap_sendwithtimeout(int sock, const char *buf, int len, int flags);
  198. API_EXPORT(int) ap_recvwithtimeout(int sock, char *buf, int len, int flags);
  199.  
  200. #endif
  201.  
  202. #ifdef __cplusplus
  203. }
  204. #endif
  205.  
  206. #endif    /* !APACHE_BUFF_H */
  207.